# -*- coding: utf-8 -*-
import os
import pandas as pd
import requests
import json
import time
import re
import pandas as pd
from openpyxl import Workbook
import API_Qianwen
import requests
import json
import shutil
from openpyxl import load_workbook

def qf(back, content, option, example):
    # prt = f"""
    #     这件事情的背景是“{back}”你现在要做的任务是对微博内容和评论进行立场分析，现在给你一段微博评论content，你需要输出这段评论所指立场的target是什么，所持有的观点opinion是什么，
    #     立场只有3种选择：支持、反对、中立。不能输出其他的，比如同情、嘲笑等。
    #     target需要是这段评论到底立场所指的是什么，这个微博评论作者到底站的那边的队。target的选择有{option},你不能输出其他的target。
    #     观点的意思就是，为什么对这个target支持或者反对，表示支持或反对的原因，你不能只输出支持或者反对，你必须输出关于支持或者反对的原因。
    #     给个例子：{example}
    #     你需要判断下面这段评论的target、stance、opinion,评论为："{content}"，
    #     你需要以json形式输出结果，不能带markdown语法，不需要返回无关信息，也不需要解释，只包含json，key为 target、stance、opinion 这三个
    #             """

    prt = f"""
这件事情的背景是“{back}”你现在要做的任务是对基于该背景的微博内容或评论进行立场分析，现在给你一段微博评论content，你需要输出这段评论所指立场的target是什么，所持有的观点opinion是什么。请注意！有如下要 求：
1.立场只有3种选择：支持、反对、中立。不能输出其他的，比如同情、嘲笑等。
2.target指的是这个作者字面上在对谁进行评论？或者说评论的主体/角色。
3.观点的意思就是，为什么对这个target支持或者反对，表示支持或反对的原因，你不能只输出支持或者反对，你必须输出关于支持或者反对的原因。
给个例子：{example}，你需要判断下面这段评论的target、stance、opinion,评论为："{content}"
你需要以json形式输出结果，不能带markdown语法，不需要返回无关信息，也不需要解释，只包含json，key为 target、opinion、stance 这三个
"""
    try:
        result=API_Qianwen.call_api_my(prt)
        #print(result)
        result = result.replace('```', '').replace('json', '')
        json_obj = json.loads(result)
        #print(json_obj['target'], json_obj['stance'], json_obj['opinion'])
        return json_obj['target'], json_obj['stance'], json_obj['opinion']


    except json.decoder.JSONDecodeError as je:
        return 0,0,0
    except Exception as e:
        return 0,0,0

    return 0,0,0

def remove_hashtags(text):
    # 使用正则表达式匹配所有被##包裹的内容，并将其替换为空字符串
    try:
        text=re.sub(r'##([^#]+)##', '', text)
    except Exception as e:
        text=""

    return text

def main2():
#     back="""
# 2024年6月，17岁中专生姜萍以第12名成绩入围阿里巴巴全球数学竞赛决赛，引发“草根逆袭”热潮，但随后被质疑作弊。11月3日，组委会调查确认其数学老师王某某在预选赛中违规提供帮助，违反“禁止与他人讨论”规则，二人成绩被取消。阿里巴巴全球数学竞赛组委会公开道歉，承认赛事制度不完善，承诺加强管理，并删除相关视频以消除误导。涟水中专对王某某进行诫勉谈话并取消其评优资格。事件暴露了赛制漏洞、媒体过度渲染及公众对“逆袭”故事的盲目追捧，姜萍则成为舆论风暴的中心，经历从“造神”到“毁神”的跌宕起伏。
# """
#     option="""
# "萝卜快跑","百度","美国","出租车司机","自动驾驶"
#     """
#     example="""
# content评论为“捧她上神坛的是你们，拽她下地狱的也是你们。别对我道歉，对姜萍道歉。”， target为“”，opinion为“因为组委会在事件中未能妥善处理，导致姜萍受到不公正对待，应该直接向姜萍道歉。”，stance为“反对”
#     """

    back="""
近日，东南大学土木工程2019级学生徐某因在考研过程中接连被南京大学和兰州大学拒绝录取而引发广泛关注。徐某在2024年考研中初试成绩在南京大学所报考专业排名第一，但在复试中被刷，外界普遍认为这与他的思想品德考核不合格有关。此前，徐某因虐猫行为被举报，并受到警方批评教育，写下悔过书，但其行为仍引发公众强烈不满，认为其性质恶劣，不仅录制虐猫视频，还加入了虐猫组织。南京大学研究生复试细则明确规定，思想品德考核不合格者不予录取，因此南大淘汰徐某有据可依。随后，徐某参加兰州大学调剂复试，但最终也未出现在拟录取名单中，再次被拒。资深媒体人胡锡进对此发声，表示尊重高校决定，但呼吁社会在徐某悔过的前提下给予其更多发展机会。然而，网友普遍不认同胡锡进的观点，认为思想品德在研究生录取中至关重要，对徐某的批评和否定是基于理性和法律的考量。
"""
    option="""
"萝卜快跑","百度","美国","出租车司机","自动驾驶"
    """
    example = """
         content评论为“老胡啊你天天偷换概念，说这些丧良心话，不怕死了在拔舌地狱轮回啊”， target为“胡锡进”，opinion为“认为胡锡进在偷换概念，说一些没有良心的话”，stance为“反对”
    """
    from_path='./dic_11/胡锡进.xlsx'
    to_path= "dic_11/胡锡进_clean.xlsx"

#     back="""
# 近日，萝卜快跑APP在武汉的送机服务订单被取消，引发停运猜测，官方解释为无车可用导致自动取消。面对公众对其抢夺网约车司机饭碗的质疑，部分地区如合肥已叫停其服务。萝卜快跑已在11个城市开展自动驾驶测试，投放超3000台车，计划扩展至70城。尽管短期内无法完全替代人类司机，但技术进步引发司机群体对未来就业的担忧。专家指出，自动驾驶创造的就业更多在于后勤岗位，难以匹配庞大的司机群体，各方需平衡技术发展与从业者利益。
# """
#     option="""
# "萝卜快跑","百度","美国","出租车司机","自动驾驶"
#     """
#     example="""
# content评论为“萝卜快跑出来多少司机饭碗没了，强烈反对萝卜快跑”， target为“萝卜快跑”，opinion为“萝卜快跑抢了打车司机的饭碗”，stance为“反对”
#     """
#     from_path='./dic_lb/cleaned.xlsx'
#     to_path= "dic_lb/lb_cleaned_1.xlsx"
#     back="""
#     2024年，伊朗与以色列的代理人冲突升级为两国之间的直接冲突。 4月1日，伊朗驻大马士革大使馆的附属的领事馆建筑遭到以色列空袭，造成穆罕默德-礼萨·扎赫迪等多名伊朗军官死亡。作为回应，伊朗于4月13日对以色列本土发动“诚实承诺行动”，大规模发射无人机及导弹。4月19日，以色列又攻击伊朗多个城市。在该冲突中，美国坚定支持以色列，伊朗则与以色列对峙并支持巴勒斯坦。以色列维护其领土权益，而锡安复国主义者推动以色列的国家安全。法国努力作为调解者推动和平，而安理会呼吁停止冲突但决议执行困难。巴勒斯坦作为冲突主要方，长期遭受占领，寻求建国和地区稳定。这些角色在冲突中各有立场，共同构成了中东地区复杂的地缘政治格局。
# """
#     option="""
#     "美国","伊朗","以色列","锡安复国主义者","法国","安理会","巴勒斯坦"
#     """
#     example="""
#     content评论为“以色列报应来了，敢跟伊斯兰国家叫板，还挑起战争，活该”， target为“以色列”，opinion为“以色列现在的下场是自作自受”，stance为“反对”
#     """
#     from_path='./dic_11/cleaned.xlsx'
#     to_path="./dic_11/11_cleaned.xlsx"
#     back="""
#     麦田农夫指控五月天假唱”事件源于一系列对五月天演唱会音源的鉴定视频。B站up主“麦田农夫”通过歌迷在演唱会现场拍摄的视频，利用技术软件进行了人声识别和音准稳定性鉴唱。他分析了五月天在上海演唱会的12首歌曲，并指出其中5首为假唱。这一发现迅速引发了网友的广泛关注和讨论。此后，“麦田农夫”还发布了关于五月天伦敦演唱会的鉴定视频，进一步指出除了《恋爱ING》等歌曲存在假唱现象外，其他歌曲也存在真假参半的情况。这些视频在社交媒体上迅速传播，引发了公众对五月天假唱行为的质疑和批评。认为五月天在个人演唱会公然假唱的行为严重侵犯了消费者权益，应承担赔偿责任和相关法律责任。在事件发酵的过程中，五月天所属经纪公司相信音乐对假唱指控进行了回应，坚称没有假唱，并表示会对造谣者进行追责。然而，这一回应并未能平息公众的质疑和争议。此外，上海市文化和旅游局执法总队和北京市文化市场综合执法总队也对此事进行了回应，表示正在对相关演唱会的原始音视频材料进行鉴定，并将及时公布结论。
# """
#     option="""
#     "麦田农夫","五月天","五月天粉丝","五月天经纪公司"
#     """
#     example="""
#     content评论为“能接受用假币买门票吗？”， target为“五月天”，opinion为“用假币不能买门票这个例子类比五月天也不能假唱”，stance为“反对”
#     """
#     from_path='./dic_10/cleaned.xlsx'
#     to_path="./dic_10/10_cleaned.xlsx"
#     back="""
#     这起爆炸事故发生在河北廊坊三河市燕郊镇，威力巨大，导致附近多辆汽车损毁，建筑物玻璃被震碎，现场一片狼藉。初步统计显示，事故造成多人伤亡，具体的伤亡人数还在进一步核实中。事故原因也在调查中。在事故发生后，央视记者迅速赶到现场，希望能够揭示事件的真相并传递最新的救援信息。然而，在采访过程中，他们遭到了现场维护秩序的工作人员的阻挠和推搡，甚至有人试图抢夺记者的拍摄设备。这种行为不仅阻碍了记者的工作，也引发了公众对事件真相探求的关注和思考。
# 据了解，在救援初期，现场工作人员与采访的央视记者一直保持着良好的互动。但随着救援工作的深入，指挥部专家组经过专业检测发现事故现场仍存在天然气泄漏的风险，因此建议所有非救援人员全部撤离到警戒线以外。指挥部本着生命至上的原则，要求所有非专业救援人员及附近居民迅速撤离，以坚决防止发生次生灾害。
# 在这一过程中，现场维护秩序的工作人员按照指挥部的指令，对包括媒体记者在内的非专业救援人员进行了劝离。期间，对于仍坚持在现场采访的央视记者，工作人员进行了强行劝离。由于一线工作人员沟通能力不强，方式方法粗暴简单，引发了记者朋友的误解和舆论的质疑，产生了不良社会影响。
# 对此情况，河北三河市政府及指挥部高度重视。他们立即对相关人员进行了严厉批评，并随后派员向相关记者朋友多次表达歉意。同时，他们也表示将切实保障记者的采访权利并提供更多便利，欢迎媒体朋友对其工作给予监督。
# 中国记协也对此事表示了关注，并连续发出三问，希望相关部门能够彻查此事，保障记者的合法权益和采访自由。他们呼吁相关部门要重视记者的作用和价值，尊重和保护记者的采访权益，为媒体创造一个良好的工作环境。
# """
#     option="""
#     "相关责任人或部门","现场维护秩序的工作人员","央视记者","中国记协","国内记者"
#     """
#     example="""
#     content评论为“燕郊是三不管地带，当地黑社会很多，都没人管，是你们能随便来的么”	Target为“当地警察”	Stance为“反对”	Opinion为“认为当地警察不作为，放纵黑社会横行，未能有效管理治安“
#     """
#     from_path='./dic_07/comment_0425.xlsx'
#     to_path="./dic_07/07_comment_0425.xlsx"
#     back="""
#     新闻学教授怒怼张雪峰事件的背景主要源于张雪峰在一次直播中的言论。当时，张雪峰在回应一位家长关于孩子报考新闻学专业的咨询时，表示如果孩子非要报新闻学，他甚至会建议“把他打晕”。这一言论迅速引发了争议，并在网络上广泛传播。很快，一些新闻学教授对此表示强烈不满，并站出来怒怼张雪峰。他们认为张雪峰的言论过于偏激，不仅误导了公众，还可能对新闻学专业的学生产生负面影响。其中，重庆大学的新闻学教授张小强就是其中的一位代表，他公开发文批评张雪峰，并强调新闻学的重要性和就业前景。这一事件引起了广泛的关注和讨论，不仅涉及到了专业选择、就业前景等实际问题，也引发了对于言论自由、公众人物责任等议题的思考
# """
#     option="""
#     "张雪峰","新闻学教授","新闻学","国内媒体"
#     """
#     example="""
#     content评论为“哈哈哈，怕招不到学生，以后待遇就差了吧[允悲]”， target为“新闻学教授”，opinion为“认为新闻学教授是怕招不到学生才批评张雪峰”，stance为“反对”
#     """
#     from_path='./dic_07/comment_0425.xlsx'
#     to_path="./dic_07/07_comment_0425.xlsx"

#     back="""
#     巴以（巴勒斯坦和以色列）冲突是中东冲突的热点之一，为阿以冲突及中东战争的一部分。巴以冲突不能够简单地概括为所有以色列犹太人与所有巴勒斯坦阿拉伯人之间的双边冲突。在争端双方的族群里，有些个人和团体呼吁完全消灭对方；现时国际的共识是支持两国方案；亦有些支持一国方案——建立一个包括现在的以色列、约旦河西岸地区、加沙地带和东耶路撒冷在内、种族及宗教地位平等的世俗国家。冲突的背后隐藏着历史根源，既有宗教的、文化的、民族的因素，更重要的是大国干预等外部因素，各种因素互相影响、激化，使得巴以冲突的复杂性非同一般。其中，两个民族对同一块土地提出了排他性的主权要求是根本原因。犹太移民定居点问题和耶路撒冷地位问题则是巴以和平之路上的严重障碍。这些问题若不解决，巴以冲突就不会停止，中东也难以实现真正的和平。2024年1月20日，以色列总理内塔尼亚胡表示，并未向美方作出同意建立巴勒斯坦国的承诺。 1月22日，巴勒斯坦总理阿什提耶表示“两国方案”是国际共识，应当逐步实现。 1月24日，以色列总理内塔尼亚胡表示，以色列将继续推进在加沙地带的军事行动直至获得“完全和绝对的胜利”。 3月，以色列宣布没收8平方公里约旦河西岸的巴勒斯坦土地，归以色列所有。 4月16日，联合国妇女署表示，新一轮巴以冲突爆发以来，巴勒斯坦加沙地带已经有超过1万名妇女被杀害。
# # """
#     option="""
#     "以色列","锡安复国主义者","巴勒斯坦","哈马斯","美国","西方国家","中国","俄罗斯","伊朗"
#     """
#     example = """
#             content评论为“谁来救救这可怜的孩子啊！以色列快点灭亡吧”， target为“以色列”，opinion为“以色列发动战争让孩子无家可归”，stance为“反对”
#             """
#
#     from_path='./dic_06/comment2.xlsx'
#     to_path="./dic_06/06_comment2.xlsx"

#     back="""
#     胡锡进谈虐猫事件的背景涉及到一个复杂的社会议题，即如何对待个体的道德过错以及是否应给予其改正的机会。这起事件的核心是一位名叫徐某祥的南京大学物理学院研究生复试对象，但因其在网络上被曝光的虐猫行为而引发了广泛的社会关注和争议。胡锡进作为资深媒体人，对此事表达了自己的看法。他认为，尽管徐某祥的行为在道德上是错误的，甚至可以说是恶劣的，但我们不能因此而完全否定他的人性和未来。他提出，社会应该给予年轻人改正错误的机会，而不是一棍子打死。胡锡进认为，虐猫行为虽然严重违背了社会公德和道德底线，但这并不意味着徐某祥就没有改过自新的可能。他主张以一种宽容和理解的态度来看待这一事件，鼓励徐某祥深刻反思自己的行为，重塑价值观。然而，胡锡进的观点并非没有争议。一些人认为，虐猫行为极其恶劣，显示出徐某祥在道德和心理层面存在严重问题，因此不应该轻易原谅。他们担心，如果社会对此类行为过于宽容，可能会导致道德底线的进一步滑坡。这起事件引发了关于如何对待犯错年轻人的深入思考。一些人认为，年轻人犯错是难免的，关键在于他们是否能够从错误中吸取教训，改正自己的行为。而另一些人则坚持认为，对于严重违背社会公德和道德底线的行为，应该给予严厉的惩罚，以儆效尤。
# """
#     option="""
#     "胡锡进","虐猫的学生","兰州大学","南京大学","大学"
#     """
#     example="""
#     content评论为“老胡啊你天天偷换概念，说这些丧良心话，不怕死了在拔舌地狱轮回啊”， target为“胡锡进”，opinion为“认为胡锡进在偷换概念，说一些没有良心的话”，stance为“反对”
#     """
#     from_path='./dic_08/04process.xlsx'
#     to_path="./dic_08/04_process.xlsx"



    # 读取需要处理的 Excel 文件
    df = pd.read_excel(from_path)

    # 初始化计数器
    count = 0

    # 每隔多少条数据备份一次
    backup_interval = 50

    #df[['target', 'stance', 'opinion']] = df[['target', 'stance', 'opinion']].astype(str)
    # 遍历每一行数据
    for index, row in df.iterrows():
        content = remove_hashtags(row["content"])

        # 检查目标、立场和意见是否为空
        if pd.isnull(row["target_qw"]) and pd.isnull(row["stance_qw"]) and pd.isnull(row["opinion_qw"]):
            try:
                if len(content) >= 10:
                    target, stance, opinion = qf(back, content, option, example)
                else:
                    target, stance, opinion = 0, 0, 0
            except Exception as e:
                print(e, end="")
                target, stance, opinion = 0, 0, 0

            print(target, stance, opinion)

            # 更新数据框中的值
            df.at[index, "target_qw"] = target
            df.at[index, "stance_qw"] = stance
            df.at[index, "opinion_qw"] = opinion

            # 每处理完一条数据，计数器加1
            count += 1

            # 每处理完10条数据保存一次
            if count % 10 == 0:
                df.to_excel(from_path, index=False)

                print("Saved at index:", index)  # 打印当前索引以便调试

            # 每隔 backup_interval 条数据备份一次
            if count % backup_interval == 0:
                os.makedirs(os.path.dirname(to_path), exist_ok=True)
                shutil.copy(from_path, to_path)

                print("Backup saved at index:", index)  # 打印当前索引以便调试

    # 最后保存一次，确保所有数据都被保存到文件中
    df.to_excel(from_path, index=False)

if __name__ == "__main__":
    main2()
